home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / yahoo / yahooutil.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  8KB  |  207 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. from __future__ import with_statement
  5. import re
  6. from urllib import unquote_plus
  7. from itertools import izip
  8. from struct import pack, unpack, calcsize
  9. from httplib import HTTPConnection
  10. from yahoo.yahoolookup import ykeys, services, statuses
  11. from logging import getLogger
  12. log = getLogger('yahoo')
  13. info = log.info
  14. from util import odict, threaded, flatten, hex2bin
  15. from pprint import pformat
  16. from common.exceptions import LoginError
  17.  
  18. class YahooLoginError(LoginError):
  19.     
  20.     def __init__(self, protocol, message):
  21.         import yahoo
  22.         if not isinstance(message, basestring):
  23.             raise TypeError('message must be a string')
  24.         
  25.         self.protocol = protocol
  26.         Exception.__init__(self, message)
  27.  
  28.  
  29. _filematch = re.compile('.*/(.+)\\?\\w+')
  30.  
  31. def filename_from_url(url):
  32.     return unquote_plus(_filematch.search(url).group(1))
  33.  
  34. argsep = pack('BB', 192, 128)
  35.  
  36. def to_ydict(d):
  37.     if not d:
  38.         return ''
  39.     
  40.     
  41.     def to_ydict_entry(k, v):
  42.         
  43.         try:
  44.             n = int(k)
  45.         except ValueError:
  46.             
  47.             try:
  48.                 n = ykeys[k]
  49.             log.warning('to_ydict got a dict with a non number key: %s', k)
  50.             return ''
  51.  
  52.  
  53.         
  54.         try:
  55.             v = str(v)
  56.         except UnicodeEncodeError:
  57.             v = unicode(v).encode('utf-8')
  58.  
  59.         return ''.join([
  60.             str(n),
  61.             argsep,
  62.             v,
  63.             argsep])
  64.  
  65.     if hasattr(d, 'iteritems'):
  66.         item_iterator = d.iteritems()
  67.     elif isinstance(d, (list, tuple)):
  68.         item_iterator = izip(d[::2], d[1::2])
  69.     
  70.     return (''.join,)((lambda .0: for k, v in .0:
  71. to_ydict_entry(k, v))(item_iterator))
  72.  
  73.  
  74. def from_ydict_iter(data):
  75.     if not data:
  76.         return iter([])
  77.     
  78.     data = data.split(argsep)
  79.     keys = data[::2]
  80.     values = data[1::2]
  81.     return izip(keys, values)
  82.  
  83.  
  84. def format_packet(data, maxlen = 500, sensitive = False):
  85.     return pformat(items)
  86.  
  87.  
  88. def yiter_to_dict(yiter):
  89.     d = odict()
  90.     for k, v in yiter:
  91.         
  92.         try:
  93.             k = ykeys[k]
  94.         except KeyError:
  95.             pass
  96.  
  97.         d[k] = v
  98.     
  99.     return d
  100.  
  101.  
  102. def from_ydict(data):
  103.     d = { }
  104.     for k, v in from_ydict_iter(data):
  105.         if k in d:
  106.             log.warning('duplicate %s: %s', k, v)
  107.         
  108.         d[k] = v
  109.     
  110.     return d
  111.  
  112. header_pack = '!4sHHHHII'
  113. header_desc = (header_pack, 'ymsg', 'version', 'zero', 'size', 'service', 'status', 'session_id')
  114. header_size = calcsize(header_pack)
  115.  
  116. def header_tostr(hdr):
  117.     
  118.     try:
  119.         sv = services[hdr.service]
  120.     except KeyError:
  121.         log.error('No service string for %s', hdr.service)
  122.         sv = str(hdr.service)
  123.  
  124.     
  125.     try:
  126.         st = services[hdr.status]
  127.     except KeyError:
  128.         log.error('No service string for %s', hdr.status)
  129.         st = str(hdr.status)
  130.  
  131.     return 'YMSG packet( srv:%s, st:%s, id:%d v:%d, sz:%d )' % (sv, st, hdr.session_id, hdr.version, hdr.size)
  132.  
  133.  
  134. def yahoo_http_post(ydata, cookies, progress_cb = (lambda x: pass)):
  135.     conn = HTTPConnection('filetransfer.msg.yahoo.com')
  136.     conn._http_vsn_str = 'HTTP/1.0'
  137.     conn._http_vsn = 10
  138.     url = 'http://filetransfer.msg.yahoo.com:80/notifyft'
  139.     conn.putrequest('POST', url, skip_host = True, skip_accept_encoding = True)
  140.     conn.putheader('Content-length', str(len(ydata)))
  141.     conn.putheader('Host', 'filetransfer.msg.yahoo.com:80')
  142.     conn.putheader('Cookie', cookies)
  143.     conn.endheaders()
  144.     log.info('putting %d bytes of data...', len(ydata))
  145.     for x in xrange(0, len(ydata), 512):
  146.         conn.send(ydata)
  147.         progress_cb(x)
  148.     
  149.     progress_cb(len(ydata))
  150.     response = conn.getresponse()
  151.     respdata = response.read()
  152.     status = response.status
  153.     log.info('response data %d bytes, status code %s', len(respdata), status)
  154.     conn.close()
  155.     if status != 200:
  156.         log.error('ERROR: POST returned a status of %d', status)
  157.         return False
  158.     
  159.     info('HTTP POST response status %d', status)
  160.     return True
  161.  
  162. yahoo_http_post = threaded(yahoo_http_post)
  163.  
  164. class Cookie(str):
  165.     
  166.     def __init__(self, s):
  167.         str.__init__(s)
  168.         info('Cookie string %s', s)
  169.         self.params = odict()
  170.         for pair in s.split('&'):
  171.             (key, val) = pair.split('=')
  172.             self.params[key] = val
  173.         
  174.  
  175.     
  176.     def val(self):
  177.         return '&'.join((lambda .0: for k, v in .0:
  178. '%s=%s' % (k, v))(self.params.items()))
  179.  
  180.  
  181.  
  182. def add_cookie(jar, cookiestr):
  183.     spl = cookiestr.find('\t')
  184.     key = cookiestr[:spl]
  185.     value = cookiestr[spl + 1:]
  186.     value = value.split('; ')[0]
  187.     log.info('adding cookie %s: %s', key, value)
  188.     jar[key] = value
  189.  
  190.  
  191. def y_webrequest(url, data, cookies):
  192.     headers = {
  193.         'Cookie': cookies['Y'] + '; ' + cookies['T'],
  194.         'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5)',
  195.         'Cache-Control': 'no-cache' }
  196.     req = urllib2.Request(url, data, headers)
  197.     response = urllib2.urlopen(req)
  198.     return response.read()
  199.  
  200. if __name__ == '__main__':
  201.     cookies = {
  202.         'Y': 'v=1&n=3lutd2l220eoo&l=a4l8dm0jj4hisqqv/o&p=m2l0e8v002000000&r=fr&lg=us&intl=us',
  203.         'T': 'z=3H2OGB3NLPGBQXPLeKgW24v&a=YAE&sk=DAAHHqpEue2zZY&d=YQFZQUUBb2sBWlcwLQF0aXABQldCb2lBAXp6ATNIMk9HQmdXQQ--' }
  204.     data = '<validate intl="us" version="8.1.0.209" qos="0"><mobile_no msisdn="17248406085"></mobile_no></validate>'
  205.     print y_webrequest('http://validate.msg.yahoo.com/mobileno?intl=us&version=8.1.0.209', data, cookies)
  206.  
  207.